<template>
    <div id="root">
        <div class="todo-container">
            <div class="todo-wrap">
                <MyHeader :addTodo="addTodo"></MyHeader>
                <MyList :todos="todos" ></MyList>
                <MyFooter :todos="todos" :checkAllTodo="checkAllTodo" :clearAllTodo="clearAllTodo"></MyFooter>
            </div>
        </div>
    </div>

</template>

<!--组件交互相关的代码-->
<script>
    // <!--    引入组件-->
    import pubsub from 'pubsub-js'
    import MyHeader from './components/MyHeader'
    import MyFooter from './components/MyFooter'
    import MyList from './components/MyList'

    export default {
        name: 'App',
        components: {
            MyFooter,
            MyHeader,
            MyList
        },
        data() {
            return {
                todos: [
                    {id: '0001', title: '吃饭', done: true},
                    {id: '0002', title: '睡觉', done: true},
                    {id: '0003', title: '学习', done: false}
                ]
            }
        },
        methods: {
            //  添加一个todo
            addTodo(todoObj) {
                this.todos.unshift(todoObj)
            },
            //    勾选或取消勾选
            checkTodo(id) {
                this.todos.forEach((todo) => {
                    if (todo.id === id) {
                        todo.done = !todo.done
                    }
                })
            },
            //    删除
            deleteTodo(_,id) {
                this.todos = this.todos.filter(todo => todo.id !== id)

            },
        //    全选或全不选
            checkAllTodo(done){
                this.todos.forEach((todo)=>{
                    todo.done=done
                })
            },
        //    清除所有已经完成的todo
            clearAllTodo(){
                this.todos=this.todos.filter((todo)=>{
                    return !todo.done
                })
            }

        },
        mounted() {
            this.$bus.$on('checkTodo',this.checkTodo)
            // this.$bus.$on('deleteTodo',this.deleteTodo)
            this.pubId=pubsub.subscribe('deleteTodo',this.deleteTodo)
        },
        beforeDestroy() {
            this.$bus.$off('checkTodo')
            // this.$bus.$off('deleteTodo')
            pubsub.unsubscribe(this.pubId)
        }
    }

</script>

<!--组件的样式-->
<style>
    /*base*/
    body {
        background: #fff;
    }

    .btn {
        display: inline-block;
        padding: 4px 12px;
        margin-bottom: 0;
        font-size: 14px;
        line-height: 20px;
        text-align: center;
        vertical-align: middle;
        cursor: pointer;
        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
        border-radius: 4px;
    }

    .btn-danger {
        color: #fff;
        background-color: #da4f49;
        border: 1px solid #bd362f;
    }

    .btn-danger:hover {
        color: #fff;
        background-color: #bd362f;
    }

    .btn:focus {
        outline: none;
    }

    .todo-container {
        width: 600px;
        margin: 0 auto;
    }

    .todo-container .todo-wrap {
        padding: 10px;
        border: 1px solid #ddd;
        border-radius: 5px;
    }


</style>
